<%# The license inside this block applies to this file.
	# Copyright 2019 Google Inc.
	# Licensed under the Apache License, Version 2.0 (the "License");
	# you may not use this file except in compliance with the License.
	# You may obtain a copy of the License at
	#
	#     http://www.apache.org/licenses/LICENSE-2.0
	#
	# Unless required by applicable law or agreed to in writing, software
	# distributed under the License is distributed on an "AS IS" BASIS,
	# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	# See the License for the specific language governing permissions and
	# limitations under the License.
-%>
func flatten<%= prefix -%><%= titlelize_property(property) -%>(v interface{}, d *schema.ResourceData, config *Config) interface{} {
	if v == nil {
		return nil
	}
	original := v.(map[string]interface{})
	if len(original) == 0 {
		return nil
	}

	v, ok := original["enable"]
	if ok && !v.(bool) {
		return nil
	}

	transformed := make(map[string]interface{})
	transformed["flow_sampling"] = original["flowSampling"]
	transformed["aggregation_interval"] = original["aggregationInterval"]
	transformed["metadata"] = original["metadata"]
	if original["metadata"].(string) == "CUSTOM_METADATA" {
		transformed["metadata_fields"] = original["metadataFields"]
	} else {
		// MetadataFields can only be set when metadata is CUSTOM_METADATA. However, when updating
		// from custom to include/exclude, the API will return the previous values of the metadata fields,
		// despite not actually having any custom fields at the moment. The API team has confirmed
		// this as WAI (b/162771344), so we work around it by clearing the response if metadata is
		// not custom.
		transformed["metadata_fields"] = nil
	}
	transformed["filter_expr"] = original["filterExpr"]
	
	return []interface{}{transformed}
}
